package com.tzb.restorder;


import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate;
import com.tzb.restorder.exception.ExceptionUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;


@SpringBootApplication
@EntityScan("com.tzb.restorder.entity")
public class RestOrderApplcation {

    /**
     * sentinel 支持对restTemplate 的服务调用
     * 在构造 RestTemplate对象的时候，只需要加载 @SentinelRestTemplate 即可
     * 这样通过 RestTemplate调用的方法都有了保护措施
     * <p>
     * 资源名：
     * httpmethod:schema://host:port/path ：协议、主机、端口和路径
     * httpmethod:schema://host:port ：协议、主机和端口
     * <p>
     * 异常降级
     * fallback: 降级方法
     * fallbackClass : 降级配置类
     * <p>
     * 限流熔断：
     * blockHandler
     * blockHandlerClass
     *
     * @return
     */
    @SentinelRestTemplate(fallbackClass = ExceptionUtils.class, fallback = "handleFallback",
                            blockHandler = "handleBlock",blockHandlerClass = ExceptionUtils.class)
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RestOrderApplcation.class, args);
    }

}
